﻿using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Innvoice.Logica.GestorObject;
using Innvoice.Logica.GestorDB;
using Innvoice.BaseDeDatos.innvoicedbDataSetTableAdapters;
using System;
using System.Text.RegularExpressions;

namespace Innvoice.Ws.Clientes
{
    /// <summary>
    /// Lógica de interacción para WCliente.xaml
    /// </summary>
    public partial class WCliente : Window
    {

        private Cliente miCliente = new Cliente();
        private int miEmpresa = 0;
        private int miOperacion = 0;
        clienteTableAdapter conexCliente = new clienteTableAdapter();

        public WCliente(Cliente un_Cliente, int Nro_empresa, int operacion)
        {
            InitializeComponent();
            miCliente = un_Cliente;
            miEmpresa = Nro_empresa;
            miOperacion = operacion;
            //prueba.DataContext = miCliente;
            DataContext = miCliente;

            // seteo pais
            PaisDB misPaises = new PaisDB();
            cbxPais.ItemsSource = misPaises.obtenerPaises();

            //seteo de provincias
            ProvinciaDB misprovincias = new ProvinciaDB();
            cbxProvincia.ItemsSource = misprovincias.obtenerProvincia((int) cbxPais.SelectedValue);

            //seteo de localidades
            LocalidadDB misLocalidades = new LocalidadDB();
            cbxLocalidad.ItemsSource = misLocalidades.obtenerLocalidad((int) cbxProvincia.SelectedValue);

            //seteo de tipo de documentos
            DniDB misTipoDni = new DniDB();
            cbxTipoDoc.ItemsSource = misTipoDni.obtenerDescripDni();

            //seteo de tipo de contrbucion
            TipoContribuyenteDB misTipoContrib = new TipoContribuyenteDB();
            cbxTipoContrib.ItemsSource = misTipoContrib.obtenerTipoContribucion();

            //seteo las condiciones de pago
            CondicionDePagoDB misCondiciones = new CondicionDePagoDB();
            cbxCondiPago.ItemsSource = misCondiciones.obtenerCondicionDePago();

            switch (operacion)
            {
                case 0:
                    //Agrega un Nuevo Cliente
                    btnAceptar.Content = " [F2] Aceptar Datos";
                    break;
                case 1:
                    //Modifica los Datos Existentes.
                    setearComboBox();
                    btnAceptar.Content = "[F3] Modificar Datos";
                    break;
            }
        }

        private void btnCancelar_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnCancelar_MouseMove(object sender, MouseEventArgs e)
        {
            this.lblayuda.Content = "Presione este boton para salir";
        }

        private void btnAceptar_Click(object sender, RoutedEventArgs e)
        {
            AgregarNuevo_Cliente();
        }

        private void btnAceptar_MouseMove(object sender, MouseEventArgs e)
        {
            this.lblayuda.Content = "Presione este boton para Aceptar/Modificar este Cliente";
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
           // MySqlTransaction miTransaction = null;

        }

        private void txtCodigoCliente_TextChanged(object sender, TextChangedEventArgs e)
        {

        }

        //setea los combobox
        private void setearComboBox()
        {
            cbxPais.SelectedValue = miCliente.NroPais;
            cbxProvincia.SelectedValue = miCliente.NroProvincia;
            cbxLocalidad.SelectedValue = miCliente.NroLocalidad;
            cbxTipoDoc.SelectedValue = miCliente.Tipodni;
            cbxTipoContrib.SelectedValue = miCliente.NroTipoContrib;
            cbxCondiPago.SelectedValue = miCliente.NroCondicionDePago;
        }

        private void txtRazonSocial_TextChanged(object sender, TextChangedEventArgs e)
        {

        }


        private void AgregarNuevo_Cliente()
        {
            miCliente.NroPais = Convert.ToByte (cbxPais.SelectedValue.ToString());
            miCliente.NroProvincia = Convert.ToByte( cbxProvincia.SelectedValue.ToString());
            miCliente.NroLocalidad = Convert.ToByte(cbxLocalidad.SelectedValue.ToString());
            miCliente.Tipodni = Convert.ToByte(cbxTipoDoc.SelectedValue.ToString());
            miCliente.NroTipoContrib = Convert.ToByte( cbxTipoContrib.SelectedValue.ToString());
            miCliente.NroCondicionDePago = Convert.ToByte(cbxCondiPago.SelectedValue.ToString());
            ClienteDB coneClassCliente = new ClienteDB();

            switch (miOperacion)
            {
                case 0:
                    //Agrega un Nuevo Cliente.
                    coneClassCliente.DarDeAltaCliente(miCliente, miEmpresa);
                    break;
                case 1:
                    //Modifica los Datos Existentes.             
                    coneClassCliente.Actualizarcliente(miCliente, miEmpresa);
                    break;
            }
            this.Close();   
        }
       
        private bool EsValidoEmail(string strIn)
        {
            // Return true if strIn is in valid e-mail format. 

            return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
        }
        
        private bool EsValidoCodigoPostal(string strIn)
        {
            // Return true if strIn is in valid e-mail format. 

            return Regex.IsMatch(strIn, @"[0-9]{1,9}(\.[0-9]{0,2})?$");
        }


        private void validar (){
        string msg = "";

            if (txtRazonSocial.Text == String.Empty)
                msg = "La razon social no debe de ser vacia \n";
            else
                msg = "La razon social esta bien \n";

            if (EsValidoCodigoPostal(miCliente.CodigoPostal) == false)
                msg = msg + "Codigo postal invalido \n";
            


            MessageBox.Show(msg);
        } 



        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.Key.ToString().ToUpper())
            {
                case "F1":
                    break;
                case "F2":
                    //MessageBox.Show("tuve exito :: " + miCliente.RazonSocial);
                    MessageBox.Show("tuve exito :: " + miCliente.RazonSocial + "\n" + miCliente.CodigoPostal);
                    validar();
                    //AgregarNuevo_Cliente();
                    break;
                case "F3":
                    MessageBox.Show("tuve exito :: " + miCliente.Direccion);
                    //modificar_Cliente();
                    break;
                case "F4":
                    //Listado_Cliente();
                    break;
                case "ESCAPE":
                    this.Close();
                    break;
                case "F12":
                    this.Close();
                    break;
                default:
                    return;
            }
        }


    }
}
